package com.zb.wx;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.zb.exception.WxException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * @Author WEN
 * @Date 2024/2/29 0029
 **/
public class WxHttpClientCodeHandler {
    private static final Logger logger = LoggerFactory.getLogger(WxHttpClientCodeHandler.class);

    /**
     * 检查微信返回的状态码
     * @param body
     * @throws WxException
     */
    public static void checkWxHttpClientResultCode(String body) throws WxException {
        JSONObject bodyObj = JSON.parseObject(body, JSONObject.class);
        String errcode = bodyObj.getString("errcode");
        if (StringUtils.isBlank(errcode)) {
            return;
        }
        logger.warn("微信状态码返回提示消息：{}", bodyObj);
        switch (errcode) {
            case "-1" -> {
                throw new WxException("微信结果提示：系统繁忙，请稍后再试（-1）");
            }
            case "40001" -> {
                throw new WxException("微信结果提示：AppSecret配置错误，请检查配置后重试（40001）");
            }
            case "40013" -> {
                throw new WxException("微信结果提示：不合法的 AppID，请检查配置后重试（40013）");
            }
            case "40125" -> {
                throw new WxException("微信结果提示：无效的appsecret，请检查配置是否有误（40125）");
            }
            case "41004" -> {
                throw new WxException("微信结果提示：缺少 secret 参数，请检查配置是否有误（41004）");
            }
            case "45009" -> {
                throw new WxException("微信结果提示：调用超过天级别频率限制（45009）");
            }
            case "47001" -> {
                throw new WxException("微信结果提示：解析 JSON/XML 内容错误;post 数据中参数缺失;检查修正后重试（47001）");
            }
            case "48001" -> {
                throw new WxException("微信结果提示：api 功能未授权，请确认公众号已获得该接口，可以在公众平台官网 - 开发者中心页中查看接口权限（48001）");
            }

            case "61004" -> {
                throw new WxException("微信结果提示：请在微信官方平台配置IP白名单（61004）");
            }
            case "61005" -> {
                throw new WxException("微信结果提示：微信令牌票据已过期，请稍等微信官方重新发放！（61005）");
            }
            case "61006" -> {
                throw new WxException("微信结果提示：微信令牌票据已过期，请稍等微信官方重新发放！（61006）");
            }
            case "61011" -> {
                throw new WxException("微信结果提示：invalid component（61011）");
            }

            case "89000" -> {
                throw new WxException("微信结果提示：该公众号/小程序已经绑定了开放平台账号（89000）");
            }
            case "89001" -> {
                throw new WxException("微信结果提示：Authorizer 与开放平台账号主体不相同（89001）");
            }
            case "89002" -> {
                throw new WxException("微信结果提示：该公众号/小程序未绑定微信开放平台账号（89002）");
            }
            case "89003" -> {
                throw new WxException("微信结果提示：解除绑定授权失败（89003）");
            }

        }
    }
}
